package com.example.onlinemallsystem.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class LoginInterceptor implements HandlerInterceptor {

    // 在请求处理之前执行（控制器方法调用前）
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {

        // 获取 Session
        HttpSession session = request.getSession();

        // 检查 Session 中是否有用户信息
        Object userInfo = session.getAttribute("userInfo");
        if (userInfo == null) {
            // 未登录，返回 401 状态码和错误信息
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().write("{\"state\":401,\"message\":\"用户未登录\"}");
            return false; // 拦截请求，不继续执行后续操作
        }

        // 已登录，放行请求
        return true;
    }

    // 请求处理之后执行（控制器方法调用后，但视图渲染前）
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        // 一般用于修改 ModelAndView
    }

    // 整个请求完成后执行（视图渲染后）
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        // 一般用于资源清理
    }
}